package com.ssvendas.modelo;

import java.io.Serializable;
import java.sql.Date;
import java.util.ArrayList;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;

import com.ssvendas.modelo.arquivos.Cupom;
import com.ssvendas.modelo.arquivos.NotaFiscal;

@Entity
public class Venda implements Serializable{

	private static final long serialVersionUID = -3377558703141692941L;

	@Id
	@SequenceGenerator(sequenceName="VENDA_SEQ",allocationSize=1,name="VENDA_ID")
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="VENDA_ID")
	private String id;
	
	@ManyToOne(fetch=FetchType.EAGER)
	private Cliente cliente;
	
	@ManyToOne(fetch=FetchType.EAGER)
	private Usuario vendedor;
	
	@ManyToMany(fetch=FetchType.EAGER)
	@JoinTable(name = "VENDA_PRODUTO" , joinColumns = @JoinColumn(name = "VENDA_ID"), inverseJoinColumns = @JoinColumn(name = "PRODUTO_CODIGO"))
	private ArrayList<Produto> produtos;
	
	private Date dataVenda;
	
	@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
	@JoinColumn(name="VENDA_ID_NOTA")
	private NotaFiscal notaFiscal;
	
	@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
	@JoinColumn(name="VENDA_ID_CUPOM")
	private Cupom cupom;

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public ArrayList<Produto> getProdutos() {
		return produtos;
	}

	public void setProdutos(ArrayList<Produto> produtos) {
		this.produtos = produtos;
	}

	public Date getDataVenda() {
		return dataVenda;
	}

	public void setDataVenda(Date dataVenda) {
		this.dataVenda = dataVenda;
	}

	public NotaFiscal getNotaFiscal() {
		return notaFiscal;
	}

	public void setNotaFiscal(NotaFiscal notaFiscal) {
		this.notaFiscal = notaFiscal;
	}

	public Cupom getCupom() {
		return cupom;
	}

	public void setCupom(Cupom cupom) {
		this.cupom = cupom;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Usuario getVendedor() {
		return vendedor;
	}

	public void setVendedor(Usuario vendedor) {
		this.vendedor = vendedor;
	}
}
